AWS Directory Service (マネージド Microsoft AD) と連係する証明書サーバーを構築する
みなさん、こんにちは! AWS事業本部の青柳@福岡オフィスです。
企業内で利用するプライベート証明書を発行するための「プライベート認証局」(プライベートCA) を構築する手段の一つに、Windows Serverの「Active Directory証明書サービス」を使用する方法があります。
Active Directory証明書サービスを利用する利点として、Active Directoryドメインと連係することによってドメイン内のコンピューターやユーザーに対して証明書を自動的に配布することができる等があります。
今回は、AWSが提供するマネージドなActive Directoryサービスである「AWS Directory Service (マネージド Microsoft AD)」に対して、Active Directory証明書サービスを組み合わせる方法を試してみました。
構成
VPC上にAWS Directory Serviceを「マネージドMicrosoft AD」で構築して、同じVPC内に「Active Directory証明書サービス」(Active Directory Certificate Services; AD CS) を導入したルートCAサーバーと、Webサーバーを配置します。
オンプレミスネットワークに見立てたVPCを用意して、VPCピアリング接続します。
Webサーバー、WebクライアントはいずれもDirectory Serviceのドメインに参加しており、ドメイングループポリシーによりルートCA証明書が配付されます。 これによって、ルートCAが発行した証明書の正当性を確認することができます。
(冗長性やセキュリティ面を考慮するとCAは複数設置することが推奨されますが、今回は1つのみの構成としました)
構築手順
ステップ 1: AWS Directory Serviceの構築
マネジメントコンソールより、以下のパラメーターで構築します。
- ディレクトリタイプ: AWS Managed Microsoft AD
- エディション: Standard Edition
- ディレクトリのDNS名:
cmdemo.local
- ディレクトリのNetBIOS名:
CMDEMO
(残りのパラメーターは適宜設定してください)
ステップ 2: 証明書サーバーの構築
Windowsインスタンスを作成して、セキュリティグループを設定する
今回は「Windows Server 2019」のAMIからEC2インスタンスを作成することにします。
証明書サーバーに対して証明書発行の要求元 (今回の場合はWebサーバー) がアクセスできるように、セキュリティグループのインバウンドルールを以下のように設定して、インスタンスに適用します。
プロトコル | ポート範囲 | ソース | 説明 |
---|---|---|---|
TCP | 135 | <要求元が存在するネットワークCIDR> | RPC |
TCP | 139 | <要求元が存在するネットワークCIDR> | NetBIOS-ssn |
TCP | 445 | <要求元が存在するネットワークCIDR> | SMB |
TCP | 49152-65535 | <要求元が存在するネットワークCIDR> | RPC (non-privilege ports) |
サーバーをDirectory Serviceのドメインに参加させる
Directory Serviceのプロパティの「DNSアドレス」欄に記載されているIPアドレスを確認します。
サーバーの「TCP/IPv4のプロパティ」の「DNSサーバーのアドレス」欄に、確認したIPアドレスを設定します。
「システムのプロパティ」から「コンピューター名/ドメイン名の変更」を選択して、ドメインに参加します。
ドメイン参加の権限を持つアカウントの入力を求められるので、Directory Serviceの構築時に設定した「Admin」アカウントとパスワードを入力します。
ドメイン参加後はドメインアカウント「CMDEMO\Admin」でログオンしてください。
(※ 本来は、ドメイン管理者アカウントを用いるのではなくADCS用のドメインアカウントを作成して使うべきですが、今回は手順簡略化のためこのまま進めます)
役割「Active Directory証明書サービス」をインストールする
サーバーマネージャーを起動して、「役割と機能の追加ウィザード」を実行します。
「役割」の選択で「Active Directory証明書サービス」にチェックを入れます。
必要な機能の追加の確認では「管理ツールを含める」にチェックを入れて「機能の追加」をクリックします。
「機能」の選択では何も追加せず、「役割サービス」の選択で「証明機関」のみにチェックを入れます。
そのままウィザードを進めて、Active Directory証明書サービスのインストールを完了します。
Active Directory証明書サービスを構成する
役割のインストールの完了後、サーバーマネージャーの上部に表示されている「!」アイコンをクリックして、「対象サーバーにActive Directory証明書サービスを構成する」をクリックします。
「次へ」をクリックします。
「証明機関」にチェックを入れて、「次へ」をクリックします。
「エンタープライズCA」を選択して、「次へ」をクリックします。
「ルートCA」を選択して、「次へ」をクリックします。
「新しい秘密キーを作成する」を選択して、「次へ」をクリックします。
暗号化のオプションを必要に応じて選択します。(通常はそのままで構いません) 「次へ」をクリックします。
CAの共通名 (Common Name) を入力します。(デフォルトのままでも構いません) 「次へ」をクリックします。
CA証明書の有効期間を指定します。(通常はそのままで構いません) ※ CAが発行する証明書の有効期間ではありません 「次へ」をクリックします。
証明書データベースとログの場所を指定します。(通常はそのままで構いません) 「次へ」をクリックします。
サマリの内容を確認して、問題が無ければ「構成」をクリックします。
「構成に成功しました」と表示されたことを確認して、構成ウィザードを閉じます。
ステップ 3: Webサーバーのためのサーバー証明書を発行してみる
サンプルとして、サーバー証明書を発行して、Webサーバー (IIS) に適用してみます。
準備として、以下の手順でWebサーバーを用意します。
- Directory Serviceのドメインに参加する
- 「役割と機能の追加ウィザード」より「Webサーバー (IIS)」と「IIS管理ツール」をインストールする
準備ができましたら、証明書の発行に進みます。
証明書の発行を要求する
「ファイル名を指定して実行」よりcertlm.msc
を入力して実行します。
「証明書 - ローカルコンピューター」画面が起動します。 ツリーから「個人」を選択して、「操作」→「すべてのタスク」→「新しい証明書の要求」の順に選択します。
「次へ」をクリックします。
「Active Directory登録ポリシー」を選択して、「次へ」をクリックします。
「コンピューター」にチェックを入れます。 「詳細」をクリックすることで、証明書の詳細が確認できます。
内容を確認しましたら、「登録」をクリックします。
「状態:成功」と表示されたことを確認して、「完了」をクリックします。
発行された証明書の内容を確認してみましょう。 証明書をダブルクリックします。
問題無いようですね!
IISに証明書を適用する
インターネットインフォメーションサービス (IIS) マネージャーを起動します。 ツリーよりWebサーバーを選択して、「サーバー証明書」アイコンをダブルクリックします。
サーバー上に登録されている証明書が、IISから認識されていることを確認します。
ツリーより「サイト」→「Default Web Site」の順に選択して、操作の「バインド」をクリックします。
「追加」をクリックします。
種類「https」、SSL証明書「(発行した証明書)」を選択して、「OK」をクリックします。
「https」が追加されたことを確認して、画面を閉じます。
これで、IISにサーバー証明書が適用され、HTTPSでアクセスできるようになりました。
ブラウザでWebサーバーへアクセスして確認する
別のクライアントやサーバーからブラウザでアクセスして、サーバー証明書がちゃんと認識されることを確認します。
前提として、アクセスするクライアントやサーバーは、Webサーバーと同じドメインに参加している必要があります。 クライアントやサーバーがドメインに参加することでCAルート証明書が自動的に配布されるためです。 (CAルート証明書がクライアント/サーバーに無ければ、Webサーバーのサーバー証明書は正当なものであると証明されません)
ブラウザを起動して、アドレスバーにhttps://web01.cmdemo.local
と入力します。
Webサイトが表示されましたら、鍵マークをクリックして、サーバー証明書を確認します。
おわりに
AWS Directory Service (マネージド Microsoft AD) でも、Active Directory証明書サービスが利用できることが確認できました。
今回はWebサーバー向けのサーバー証明書の発行を試しましたが、それ以外にも、クライアント証明書などの発行も行えるのではないかと思います。 いずれ試してみたいと思います。